iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
AI & Data

網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術系列 第 21

【Day 21】- 你的爬蟲還在用帳號密碼進行登入? 帶上 Session 吧!(實戰 Selenium 自動點擊 Instagram 好友貼文贊 1/2)

  • 分享至 

  • xImage
  •  

前情提要

前一篇帶各位在 Selenium 中透過執行 JavaScript 語句達到向下捲動的效果。在每次爬取完成後都進行捲動更新載入的文章,並不重複爬取。

開始之前

今天要帶各位實戰一個自動按好友貼文愛心的小爬蟲。當我們直接進到 https://www.instagram.com/ 會發現要輸入帳號密碼。

在程式當中直接寫入帳號密碼有一些危險性(不小心 git push 上去),有兩個解決方法,將帳號密碼寫在環境變數,並在程式中去讀取環境變數。另一個解決方法是,將登入過後的使用者 session 擷取下來,並在程式運行中以 cookies 的方式帶上去。

預期效果

先使用 Edithiscookies 等工具將 cookies 上的使用者 session 匯出。

將使用者 session 導入至 selenium cookies 並重新整理。

不必輸入帳號密碼便可成功登入。

實作

首先先寫個簡單的程式用 selenium 開啟 instagram 網頁。

會發現需要進行登入。

from selenium import webdriver
from time import sleep
import json

if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.get('https://www.instagram.com/')

我們可以到 https://www.instagram.com/ 進行登入,並用 cookies 修改的擴充套件將 cookies 匯出。

接下來將 cookies 貼上到一個 JSON 檔,可以只留下 name 與 value 即可。

再來,在我們的程式中讀取該 JSON 檔案,並寫個 for-loop 將 cookie 們加入 Selenium,注意要在加入完成後 refresh。

from selenium import webdriver
from time import sleep
import json

if __name__ == '__main__':
    with open('cookies_jar.json') as f:
        cookies = json.load(f)
    driver = webdriver.Chrome()
    driver.get('https://www.instagram.com/')

    for cookie in cookies:
        driver.add_cookie(cookie)
    driver.refresh()

可以發現我們能夠成功進行登入了。

結語

今天透過加入使用者 session 至 Selenium 當中,達到不須輸入使用者帳號密碼進行登入的效果。此技巧可以用在許多應用程式的爬取上面,例如說 facebook Discord 等等需要登入的應用程式都可以透過這個技巧來達到不須輸入使用者帳號密碼進行登入。

明日內容

明天會帶各位加入自動點擊 Instagram 中好友貼文贊的功能。

補充資料

Instagram: https://www.instagram.com/

Selenium with Python docs : https://selenium-python.readthedocs.io/

Selenium docs : https://readthedocs.org/projects/selenium-python/downloads/pdf/latest/


上一篇
【Day 20】- 讓 Selenium 去 Dcard 上自動向下捲動 (實戰 Selenium 模擬使用者划手機 2/2)
下一篇
【Day 22】- 將朋朋的 Instagram 貼文全部按讚owo(實戰 Selenium 自動點擊 Instagram 好友貼文贊 2/2)
系列文
網路爬蟲,萬物皆爬 - 30 天搞懂並實戰網路爬蟲及應對反爬蟲技術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言